using Digitalmes.Application.Extensions;
using Digitalmes.Infrastructure.Extensions;
using Digitalmes.WebApi.Extensions;
using Digitalmes.WebApi.Hubs;
using Serilog;

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    ContentRootPath = AppContext.BaseDirectory,  // 设置根目录，默认为 Environment.CurrentDirectory，即程序集文件所在的目录。
});

// 注册Serilog日志组件
builder.Host.UseSerilog((hostingContext, loggerConfiguration) =>
    loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)); // 使用 Serilog，从配置文件中读取配置。

// 注册服务
builder.Host.AddApplicationSetup();
builder.Host.AddInfrastructureSetup();
builder.Host.AddWebApiSetup();

// 使用守候进程
//  注意：使用守候进程进行部署，需关注日志文件的路径，可以改为绝对路径。
// 可部署为 Window 服务。
builder.Host.UseWindowsService();
// 可部署为 Linux 服务。
builder.Host.UseSystemd();

// 构建
var app = builder.Build();

app.UseDefaultOpenApi();
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseCors(CorsPolicy.DefaultPolicyName);
app.UseAuthentication();
app.UseAuthorization();

// 注册全局限流管道
app.UseRateLimiter();

// 添加自定义的中间件

// 注册全局异常处理管道
app.UseExceptionHandler();

app.MapHub<ChatHub>("/signalr-hubs/chat");

// 注册自定义的终结点。
app.MapEndpoints();

app.Run();
